 /**
 * Implementación de una barra de estado para mostrar mensajes y estados
 * @class Extmx.StatusBar 
 * Componente que crea un status bar para mostrar mensajes al usuario junto con 
 * progressbar para cuando se encuentra en estado "load".
 *
 * @extends Ext.ux.StatusBar
 * @xtype mxstatusbar
 * @autor Ing. Josué Hernández Gómez<br>
 *        joshua@extjs.mx<br>
 *        http://www.joshua.com.mx
 * @fecha 9 de febrero 2010. Oaxaca, M&eacute;xico
 */
 
 Ext.namespace('Extmx.StatusBar');
 
 Extmx.StatusBar = Ext.extend(Ext.ux.StatusBar,{
	/**
	 * @cfg String defaultText Mensaje por defecto de la barra. Inicialmente es "Listo"
	 */
	defaultText:"Listo",
	
	autoClear : 9000,
	
	/**
	* @cfg String defaultIconCls Icono por defecto de la barra. Inicialmente "x-status-valid"
	*/
	defaultIconCls:"x-status-valid",
	
 	initComponent : function(){
 		this.pBar = new Ext.ProgressBar({ 		        
                    width 		: 90,
                    height :15,
                    hidden :true,
                    baseCls : 'x-progress-mx'
		});
		var _items;
		if(Ext.isEmpty(this.items))
		//si no esta definido
			_items=[this.pBar,"-"];
		else
		//el arreglo de items ya esta definido
		{
			_items=this.items;
			_items.unshift("-");
			_items.unshift(this.pBar);
		}
                
 		var config = {			
                    items: _items
 		}; 					
		Ext.apply(this,config);
		
		Extmx.StatusBar.superclass.initComponent.call(this,arguments);
 	},
 	
	/**
     * Establece el componente en estado load. Muestra el icono y el progressbar
     * @method cargando
     * @param {String} msg (optional) Mensaje de espera que se desea mostrar. Si no se 
     * recibe por defecto tiene 'Por favor espere...'
     * @return {Extmx.StatusBar} this
     */	
 	cargando : function(msg){
		var msg=(msg)?msg:'Por favor espere...';
		
		this.pBar.show();
		this.pBar.wait({
			interval	: 100,
			increment	: 15,
			scope		: this
		});
		this.setStatus({
			text: msg,
			iconCls: 'x-status-busy'
		});
		return this;  						 						
 	},
 	
	/**
     * Establece el componente en estado v&aacute;lido. 
     * @method listo
     * @param {String} msg (optional) Mensaje se desea mostrar. Ver {@link #defaultText}
     * @param {Boolean} limpiar (optional) Si se env&iacute;a true, limpiar&aacute; el mensaje enviado despu&eacute; de un determinado
	 * tiempo especificado por {@link #autoClear}. Por defecto en true
     * @return {Extmx.StatusBar} this
     */	
 	listo : function(msg,t){
		t=t||true;
		var msg=(msg)?msg: this.defaultText;
		this.setStatus({
				text: msg,
				iconCls: 'x-status-valid',
				clear: t
		});
		this.pBar.reset(true);
		return this; 			
 	},
	
	/**
     * Establece el componente en estado "Guardando. Muestra el progressbar y el &iacute;cono es x-status-saving
     * @method guardando
     * @param {String} msg (optional) Mensaje se desea mostrar. Por defecto 'Guardando, porfavor espere...'
     * @return {Extmx.StatusBar} this
     */	
 	guardando : function(msg){
		var msg=(msg)?msg:'Guardando, porfavor espere...';
		this.pBar.show();
		this.pBar.wait({
			interval	: 100,
			increment	: 15,
			scope		: this
		});
		this.setStatus({
			text: msg,
			iconCls: 'x-status-saving'
		});
		return this; 			
 	},
	
	/**
     * Establece el componente en estado 'Agregado'. Esconde el progressbar
     * @method agregado
     * @param {String} msg (optional) Mensaje se desea mostrar. Por defecto 'Agregado'
     * @param {Boolean} limpiar (optional) Si se env&iacute;a true, limpiar&aacute; el mensaje enviado despu&eacute; de un determinado
	 * tiempo especificado por {@link #autoClear}. Por defecto en true
     * @return {Extmx.StatusBar} this
     */	
 	agregado : function(msg,t){
        t=t||true;
		var msg=(msg)?msg:'Agregado';

		this.setStatus({
			text: msg,
			iconCls: 'x-status-agregado',
			clear: t
		});
		return this; 			
 	},
	
	/**
     * Establece el componente en estado "guardado". Esconde el progressbar
     * @method guardado
     * @param {String} msg (optional) Mensaje se desea mostrar. Por defecto 'Guardado'
     * @param {Boolean} limpiar (optional) Si se env&iacute;a true, limpiar&aacute; el mensaje enviado despu&eacute; de un determinado
	 * tiempo especificado por {@link #autoClear}. Por defecto en true
     * @return {Extmx.StatusBar} this
     */	
 	guardado : function(msg,t){
	    t=t||true;
		var msg=(msg)?msg:'Guardado';
		this.setStatus({
			text: msg,
			iconCls: 'x-status-saved',
			clear: t
		});
		this.pBar.reset(true);
		return this; 		
 	},
	
	/**
     * Estable el componente en estado inv&aacute;lido. Muestra las letras en rojo y el &iacute;cono 'x-status-error'
     * @method error
     * @param {String} msg  Mensaje se desea mostrar.
     * @param {Boolean} limpiar (optional) Si se env&iacute;a true, limpiar&aacute; el mensaje enviado despu&eacute; de un determinado
	 * tiempo especificado por {@link #autoClear}. Por defecto en false
     * @return {Extmx.StatusBar} this
     */	
 	error : function(msg,t){
		t=t||false;
		var msg=(msg)?msg:'!';
		this.setStatus({
			text: msg,
			iconCls: 'x-status-error',
            clear: t
		});
		this.pBar.reset(true);
		return this; 		
 	}
});
 
Ext.reg('mxstatusbar',Extmx.StatusBar);
 